<?php
namespace Todo\Util;

/**
 * 数组处理工具
 * Class ArrayUtil
 * @package Common\Util
 */
class ArrayUtil
{
    /**
     * 把数组转换成键值对
     * @param array $list 原始数组
     * @param string $keyField=id 键值字段
     * @param string $valField=null 值的字段,默认为整行数据
     * @return array
     */
    public  static function map($list, $keyField='id', $valField=null){
        $map = array();
        foreach ($list as $row){
            $map[$row[$keyField]] = is_null($valField) ? $row : $row[$valField];
        }
        return $map;
    }

    /** 把数组变成树形结构
     * @param $list 原始数据
     * @param int $parentVal=0上级的值
     * @param string $parentField=pid上级的键名
     * @param string $keyField=id主键名
     * @return array
     */
    public static function getTree($list, $parentVal=0, $parentField="pid", $keyField="id"){
        $tree = array();
        foreach ($list as $row){
            if($row[$parentField] == $parentVal)
            {
                $subs = self::getTree($list, $row[$keyField], $parentField, $keyField);
                if($subs) $row['children'] = $subs;
                $tree[] = $row;
            }
        }
        return $tree;
    }

    /**
     * 重新映射数组的键值
     * @param $data
     * @param $fieldMap
     * @return array
     */
    public static function reMap($data, $fieldMap){
        if(!$fieldMap) return $data;
        $return = array();
        foreach ($fieldMap as $k=>$f){
            isset($data[$k]) && ($return[$f] = $data[$k]);
        }
        return $return;
    }

    /**
     * 获取数组的一列，兼容低版本
     * @param $array 数组
     * @param $column 列名
     * @return array 返回值
     */
    public static function getColumn($array, $column){
        if(function_exists('array_column')) return array_column($array, $column);

        $list = array();
        foreach ($array as $row) $list[] = $row[$column];

        return $list;
    }
}